<?php

require_once 'OperacoesBD.php';
require_once "ConectaDB.php";

/**
 * Classe responsável por tratar toda as alterações referentes a tabela Professor no banco de dados,
 * ela implementa a interface OperacoesBD, afim de garantir que os métodos básicos de inserção, 
 * consulta, edição e exclusão de dados sejam implementados na aplicação.
 * 
 * @author gabrielbmoro
 */
class DBProfessor implements OperacoesBD {

    private $conection;
    private $bdConection;
    private $table;

    /* O método construtor inicializará os dados: recuperando a conecção com o banco de dados, 
      inicializando o nome da tabela e recuperando o objeto mediador com a base de dados */

    public function __construct() {
        $this->conection = ConectaDB::singleton();
        $this->bdConection = $this->conection->getBCConection();
        $this->table = "`Professor`";
    }

    /* Método responsável pela inserção de dados na tabela */

    public function inserir($dado) {
        $colunas = "`nome`,`cpf_login`,`instituicao_origem`,`TipoProfessor_idTipoProfessor`,`email`,`senha`,`idPermissao`";
        $resultSet = $this->bdConection->query("INSERT INTO " . $this->table . "(" . $colunas . ") VALUES(" . $dado . ");");

        if ($resultSet) {
            return true;
        } else {
            return false;
        }
    }

    /* Método responsável por recuperar dados da tabela */

    public function recuperar($campoCondicional) {
        $colunas = "`nome`";
        $nome = null;
        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " . $this->table .
                    " WHERE `idProfessor` = " . $campoCondicional . ";");



            while ($row = $resultSet->fetch_object()) {
                $nome = $row->nome;
            }

            return $nome;
        } else {
            return null;
        }
    }

    /* Método responsável por recuperar o idProfessor pelo cpf ou siape, de acordo com seu estado (interno ou externo). */

    public function recuperarIdPorLogin($login) {
        $colunas = "`idProfessor`";
        if (isset($this->conection)) {

            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " . $this->table .
                    " WHERE `siape_login` = " . $login . " or `cpf_login`=" . $login . ";");

            $id = null;

            while ($row = $resultSet->fetch_object()) {
                $id = $row->idProfessor;
            }
        }
        return $id;
    }

    /* Método responsável por recuperar o idProfessor de acordo com o nome do professor */

    public function recuperaIdProfessor($nomes) {
        $colunas = "`idProfessor`";
        $arrayListId = null;
        $contador = 0;
        $count = 0;
        if (isset($this->conection)) {
            for (; $count < sizeof($nomes); $count++) {
                $nome = $nomes[$count];

                $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " . $this->table .
                        " WHERE `nome` = \"" . $nome . "\";");

                $id = null;

                while ($row = $resultSet->fetch_object()) {
                    $id = $row->idProfessor;
                }
                $arrayListId[$contador] = $id;
                $contador++;
            }
            return $arrayListId;
        }
    }

    /* Método responsável por realizar um select utilizando a característica LIKE na consulta, ou seja, 
     * utilizando o atributo valores que pode conter na palavra, não precisando ser a palavra igual a registrada em banco.
     * Por exemplo, LIKE %'g'% retorna todos os registros que contém a letra 'g' na palavra.     */

    public function selectLike($colunas, $valores) {
        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " . $this->table .
                    " WHERE `nome` LIKE \"%" . $valores . "%\";");

            $vetorNomes = null;

            $contador = 0;

            while ($row = $resultSet->fetch_object()) {
                $vetorNomes[$contador] = $row->nome;
                $contador++;
            }
            return $vetorNomes;
        }
        return null;
    }

    /* Método responsável por recuperar o idPermissao do professor, baseando-se em seu id. */

    public function recuperarPermissao($idProfessor) {
        $colunas = "`idPermissao`";
        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " . $this->table .
                    " WHERE `idProfessor` = \"" . $idProfessor . "\";");

            $idPermissao = null;

            while ($row = $resultSet->fetch_object()) {
                $idPermissao = $row->idPermissao;
            }

            return $idPermissao;
        }
    }

    public function deletar($dado) {
        
    }

    public function editar($campo, $dado) {
        
    }

}
